﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using BLL.BusinessClasses;

namespace WebSite.Empresa
{
    public partial class Aplicaciones : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (this.Session["UsuarioDeSesion"] == null || !(this.Session["UsuarioDeSesion"] is UsuarioEmpresa))
            {
                this.Response.Redirect(@"~/General/Principal.aspx");
            }
            if (!(this.Page.IsPostBack))
            {
                this.DarBienvenida();
            }
        }
        private void DarBienvenida()
        {
            ((Label)(this.Master.FindControl("Label_Bienvenida"))).Text = "Bienvenido <u>" +
                                                                          ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.Nombre +
                                                                          "</u>";
        }

        // Click Event Handlers
        protected void Button_LogOff_Click(object sender, EventArgs e)
        {
            this.Session["UsuarioDeSesion"] = null;
            this.Response.Redirect(@"~/General/Principal.aspx");
        }
        protected void Button_EnviarEmail_Click(object sender, EventArgs e)
        {
            try
            {
                List<string> Recipients = (from m in ((UsuarioUniversitario)this.Session["Aplicante"]).Contactos
                                           where m.TipoContacto.Trim().ToLower() == "email"
                                           select m.Descripcion).ToList();

                string Texto = new Documento("Cita de Empleo").Contenido + "<br />" +
                               "Datos de la Cita: " + "<br /><br />" +
                               "Empresa: " + ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.Nombre + "<br />" +
                               "Persona de Contacto: " + ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.PersonaContacto + "<br />" +
                               "Cargo de la persona: " + ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.CargoPersonaContacto + "<br />" +
                               "Pais: " + ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.Pais.Descripcion + "<br />" +
                               "Direccion: " + ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.Direccion + "<br />";

                BLL.BusinessClasses.Email.SendMail(Recipients, null, "Notificacion Cita de Empleo", Texto);

                this.Label_NotificacionEnvioEmail.Text = "El mensaje ha sido enviado con éxito";
                this.Label_NotificacionEnvioEmail.Visible = true;
            }
            catch 
            {
                this.Label_NotificacionEnvioEmail.Text = "No se ha podido enviar el mensaje";
                this.Label_NotificacionEnvioEmail.Visible = true;
            }
        }

        // Helper Methods
        protected void GridView_VacantesActivas_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.Panel_AplicacionesDeVacante.Visible = true;
            this.GridView_Aplicaciones.SelectedIndex = -1;

            this.Panel_DatosAplicante.Visible = false;
        }
        protected void GridView_Aplicaciones_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.Panel_DatosAplicante.Visible = true;
            this.Button_EnviarEmail.Enabled = true;

            if (this.GridView_Aplicaciones.SelectedRow.FindControl("DivNombreEgresado").Visible == true)
            {
                this.Session["Aplicante"] = new UsuarioEgresado(Convert.ToInt32(this.GridView_Aplicaciones.SelectedDataKey["ID_Egresado"].ToString()));
                
                this.ObjectDataSource_Summary.TypeName = "BLL.BusinessClasses.UsuarioEgresado";
                this.ObjectDataSource_Summary.SelectMethod = "GetEgresadoByID";                
                this.ObjectDataSource_Summary.SelectParameters.Add(new Parameter("IDToSearch", DbType.Int32, this.GridView_Aplicaciones.SelectedDataKey["ID_Egresado"].ToString()));

            }
            if (this.GridView_Aplicaciones.SelectedRow.FindControl("DivNombreEstudiante").Visible == true)
            {
                this.Session["Aplicante"] = new UsuarioEstudiante(Convert.ToInt32(this.GridView_Aplicaciones.SelectedDataKey["ID_Estudiante"].ToString()));

                this.ObjectDataSource_Summary.TypeName = "BLL.BusinessClasses.UsuarioEstudiante";
                this.ObjectDataSource_Summary.SelectMethod = "GetEstudianteByID";
                this.ObjectDataSource_Summary.SelectParameters.Add(new Parameter("IDToSearch", DbType.Int32, this.GridView_Aplicaciones.SelectedDataKey["ID_Estudiante"].ToString()));
            }
        }

        protected void GridView_Aplicaciones_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                if (DataBinder.Eval(e.Row.DataItem, "ID_Egresado") != null)
                {
                    ((HtmlGenericControl)e.Row.FindControl("DivNombreEgresado")).Visible = true;
                    ((HtmlGenericControl)e.Row.FindControl("DivNombreEstudiante")).Visible = false;                    
                }
                else if (DataBinder.Eval(e.Row.DataItem, "ID_Estudiante") != null)
                {
                    ((HtmlGenericControl)e.Row.FindControl("DivNombreEgresado")).Visible = false;
                    ((HtmlGenericControl)e.Row.FindControl("DivNombreEstudiante")).Visible = true;                    
                }
            }
        }
        protected void GridView_SummaryDatos_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ListBox SummaryListBox;

                if (this.Session["Aplicante"] is UsuarioEgresado)
                {
                    SummaryListBox = ((ListBox)e.Row.FindControl("ListBox_SummaryCarreras"));
                    SummaryListBox.DataSource = from c in ((UsuarioEgresado)this.Session["Aplicante"]).Carreras
                                                select c;
                    SummaryListBox.DataTextField = "Descripcion";
                    SummaryListBox.DataValueField = "ID";
                    SummaryListBox.DataBind();

                    SummaryListBox = ((ListBox)e.Row.FindControl("ListBox_SummaryPostgrados"));
                    SummaryListBox.DataSource = from p in ((UsuarioEgresado)this.Session["Aplicante"]).Postgrados
                                                select p;
                    SummaryListBox.DataTextField = "Descripcion";
                    SummaryListBox.DataValueField = "ID";
                    SummaryListBox.DataBind();
                }
                else if (this.Session["Aplicante"] is UsuarioEstudiante)
                {
                    SummaryListBox = ((ListBox)e.Row.FindControl("ListBox_SummaryCarreras"));
                    SummaryListBox.Items.Clear();
                    SummaryListBox.Items.Add(new ListItem(((UsuarioEstudiante)this.Session["Aplicante"]).Carrera.Descripcion,
                                                          ((UsuarioEstudiante)this.Session["Aplicante"]).Carrera.ID.ToString()));

                    ((Label)e.Row.FindControl("Label_SummaryCarreras")).Text = "Carrera";
                    e.Row.FindControl("DIV_SummaryPostgrados").Visible = false;
                }

                SummaryListBox = ((ListBox)e.Row.FindControl("ListBox_SummaryHabilidades"));
                SummaryListBox.DataSource = from h in ((UsuarioUniversitario)this.Session["Aplicante"]).Habilidades
                                            select h;
                SummaryListBox.DataTextField = "Descripcion";
                SummaryListBox.DataValueField = "ID";
                SummaryListBox.DataBind();

                switch (((UsuarioUniversitario)this.Session["Aplicante"]).SiVehiculoPropio)
                {
                    case true:
                        ((TextBox)e.Row.FindControl("TextBox_SummaryVehiculoPropio")).Text = "Si";
                        break;
                    case false:
                        ((TextBox)e.Row.FindControl("TextBox_SummaryVehiculoPropio")).Text = "No";
                        break;
                }

                switch (((UsuarioUniversitario)this.Session["Aplicante"]).SiBuscaTiempoCompleto)
                {
                    case true:
                        ((TextBox)e.Row.FindControl("TextBox_SummaryTiempoCompleto")).Text = "Si";
                        break;
                    case false:
                        ((TextBox)e.Row.FindControl("TextBox_SummaryTiempoCompleto")).Text = "No";
                        break;
                }

                if (((UsuarioUniversitario)this.Session["Aplicante"]).Foto != null)
                {
                    ((Image)e.Row.FindControl("Image_SummaryFoto")).ImageUrl = ((UsuarioUniversitario)this.Session["Aplicante"]).Foto;
                }
                else
                {
                    if (((UsuarioUniversitario)this.Session["Aplicante"]).Sexo.Trim() == "M")
                        ((Image)e.Row.FindControl("Image_SummaryFoto")).ImageUrl = "~\\Pictures\\UserPictures\\DefaultMUserPic.png";
                    else if (((UsuarioUniversitario)this.Session["Aplicante"]).Sexo.Trim() == "F")
                        ((Image)e.Row.FindControl("Image_SummaryFoto")).ImageUrl = "~\\Pictures\\UserPictures\\DefaultFUserPic.png";
                }

                switch (((UsuarioUniversitario)this.Session["Aplicante"]).Estado.Trim())
                {
                    case "Activo":
                        ((Label)e.Row.FindControl("Label_SummaryEstado")).Text = "Empleado";
                        break;
                    case "Inactivo":
                        ((Label)e.Row.FindControl("Label_SummaryEstado")).Text = "Desempleado";
                        break;
                    case "Incognito":
                        ((Label)e.Row.FindControl("Label_SummaryEstado")).Text = "No Especificado";
                        break;
                }
            }
        }

        // Page Expression Methods
        protected object EvaluateIfPuestoEqualsNull()
        {
            return (Eval("Puesto") == null) ? "<span class=\"LetraRoja\">No Especificado</span>" : Eval("Puesto");
        }
    }
}
